AWS IoT Events คืออะไร? การแนะนำฟังก์ชันของ AWS IoT ในปี 2023
บทความนี้มีเนื้อหาดัดแปลงมาจากบทความภาษาญี่ปุ่นของ Classmethod, Inc. ในหัวข้อ「WS IoT 再入門ブログリレー – AWS IoT Events 編」 หากผู้อ่านสนใจอ่านเนื้อหาต้นฉบับสามารถอ่านได้ที่ลิ้งค์ "บทความต้นฉบับ" ด้านล่าง เนื้อหาในบทความนี้การอัพเดทเนื้อหาบางอย่างเพื่อให้เข้าใจง่ายขึ้นทำให้แตกต่างจากต้นฉบับในบางจุด
เกริ่นนำ
สวัสดีครับ ต้า ครับ
ในบทความนี้เราจะแนะนำเกี่ยวกับฟังก์ชัน หรือ โครงสร้างพื้นฐานของ AWS IoT Events กันครับ
ภาพรวมของ AWS IoT Events
ใน Architecture ของ AWS IoT นั้น AWS IoT Events จะเป็นบริการที่อยู่ในหมวด「Data Service」ครับ
อ้างอิง:How AWS IoT works
ขออ้างอิงข้อความจากเอกสารทางการของ AWS ครับ
AWS IoT Events detects and responds to events from IoT sensors and applications. Events are patterns of data that identify more complicated circumstances than expected, such as motion detectors using movement signals to activate lights and security cameras. AWS IoT Events continuously monitors data from multiple IoT sensors and applications, and integrates with other services, such as AWS IoT Core, IoT SiteWise, DynamoDB, and others to enable early detection and unique insights.
โดยจากข้อความด้านบนทำให้เราทราบว่านี่คือบริการที่จะทำการตรวจจับสถานภาพของอุปกรณ์ IoT ของเรานั่นเองครับ
AWS IoT Events ใช้งานอย่างไร
อุปกรณ์ที่ใช้บริการ IoT ส่วนใหญ่นั้นมีประสิทธิภาพในการประมวลผลที่ไม่สูงมากนัก เราสามารถส่งค่าของเซนเซอร์ที่มีอยู่ได้แต่มีหลายกรณีที่เราไม่สามารถตรวจสอบและส่งแจ้งเตือนสภาพหรือสถานะที่ IoT เปลี่ยนไปได้ ยกตัวอย่างเช่น เซนเซอร์อุณหภูมิ เราสามารถส่งข้อมูลได้ว่าตอนนี้มีอุณหภูมิเท่าไรได้ แต่การที่เราจะคำนวณจากข้อมูลที่มีอยู่ว่าอุณหภูมิที่มีอยู่ตอนนี้นั้นผิดปกติหรือไม่นั้น จำเป็นต้องสร้างโปรแกรมขึ้นมาสำหรับคำนวณ Logic เหล่านี้ครับ(Programmable Logic Controller)
จากตัวอย่างด้านบน หากเราจำเป็นต้องควบคุมการคำนวณที่ซับซ้อนขึ้น การทำสิ่งเหล่านี้บน Edge device จะเป็นเรื่องยากขึ้น หากจะทำเรื่องนี้บน cloud จำเป็นต้องสร้าง State machine บน Lambda ขึ้นเป็นต้น แต่การทำ State machine จำเป็นต้องใช้การโหลดที่สูง หากเราจะสร้างเองขึ้นมาแต่ต้นด้วยตนเองเราก็ต้องมานั่งจัดการเรื่องบัคด้วยตนเองด้วย
ตรงนี้เอง หากเราใช้ IoT Events จะสามารถใช้ State machine ที่เป็น GUI ซึ่งจะทำให้การติดตั้งเป็นเรื่องง่ายมากขึ้น นอกจากนี้ หากต้องการควบคุมด้วยโค้ดเราก็สามารถใช้ CloudFormation หรือ AWS CDK ได้ด้วย โดยสามารถอ่านข้อมูลเพิ่มเติมได้ที่ลิ้งค์ด้านล่างนี้ครับ
AWS IoT Events resource type reference - AWS CloudFormation
aws-cdk-lib.aws_events module · AWS CDK
ในหัวข้อต่อไป เราจะมาลองดูว่า IoT Events มีฟังก์ชันอะไรอยู่บ้าง ด้วยการสร้างระบบอย่างง่ายๆที่ได้เขียนไว้ด้านบนนี้นะครับ
แนะนำฟังก์ชัน
Detector models
Detector models คือ model ที่ใช้สำหรับควบคุม state machine ครับ บท GUI ที่เห็นของ Detector model จะแบ่งออกเป็น 3 ส่วนตามด้านล่างนี้ ซึ่งจะอธิบายในหัวข้อต่อไปครับ
จุดเริ่มต้น
ตามชื่อที่เขียนไว้ นี่เป็นจุดที่จะชี้ว่าเมื่อได้รับข้อมูลจะเริ่มต้นที่จุดไหน ตามภาพด้านบนนี้จะเห็นได้ว่าเริ่มต้นที่inBoundary
เมื่อถึงที่จุดนี้ detector จะถูกสร้างขึ้น ส่วนตัว event จะสามารถส่งจาก AWS CLI、IoT Rule หรือ IoT Analytics ของ IoT Core มายัง AWS IoT Events ได้ครับ
สถานะ
สถานะ หรือ state จะมีจุดที่ทำการควบคุม ON/OFF ของ light หรือ สถานะ ปกติ/ผิดปกติ ของ Device state จะมี Event อยู่ 3 ประเภท การที่เราใส่ Action เข้าไปใน Event จะทำให้เราสามารถการประมวลผลโดยละเอียดได้ สามารถตั้งค่า "event condition" ที่จะทำให้เราเลือกได้ว่าจะมี Action อะไรถึงจะเกิด Event สำหรับเกี่ยวกับเงื่อนไขสามารถตรวจสอบได้ที่หัวข้อ "เงื่อนไขการเปลี่ยนแปลง" ตามด้านล่างนี้
- OnEnter: รันคำสั่งเมื่อ state เกิดการเปลี่ยนแปลง
- OnInput: รันคำสั่งเมื่อ state ได้รับข้อมูล
- OnExit: รันคำสั่งเมื่อ state เปลี่ยนแปลงเป็น state อื่น
เงื่อนไขการเปลี่ยนแปลง
เราสามารถตั้งค่า Action สำหรับเงื่อนไขการตัดสินและเกณฑ์การประเมินสำหรับการเปลี่ยนไปยัง state ถัดไปได้ ซึ่งดูได้จากส่วนสีเทาขวาล่างของภาพด้านล่าง ส่วนเนื้อหาที่ติดตั้งที่เป็น Event trigger logic คือ ถ้าข้อมูลที่ได้รับ $input.lineInput.lineEndTime
ไม่เท่ากับข้อมูลที่มีอยู่ $variable.previosLineEndTime
จะทำการเปลี่ยนแปลงเป็น state ต่อไป
Action
เราสามารถสร้าง Timer ในการบันทึกตัวแปร หรือ การทำงานร่วมกันระหว่าง AWS Service อื่น โดยเราจะทำการตั้งค่า Action ได้ที่ state กับเงื่อนไขการเปลี่ยนแปลงครับ ตัวแปรจะมีประโยชน์เมื่อเราต้องการเก็บสถานะล่าสุดและ branch แยกอย่างมีเงื่อนไข timer สามารถที่จะตั้งค่า เริ่มต้น หยุด รีเซ็ทได้ หรือจะใช้ตรวจสอบว่าหากไม่ได้รับอีเวนท์ในช่วงระยะเวลาหนึ่ง คุณสามารถตรวจจับ timeout ของ timer ตรวจสอบว่าระบบทำงานอยู่หรือไม่ ได้ สำหรับรายชื่อ AWS Service ที่ทำงานร่วมได้นั้นมีดังต่อไปนี้
- DynamoDB
- DynamoDBv2
- IoT Events
- IoT SiteWise
- Kinesis Firehose
- Lambda
- SNS
- SQS
Detector(s)
สร้างขึ้นเมื่อได้รับข้อมูลโดย Detector model ของ AWS IoT Events โดยจะสร้างให้สามารถรองรับ Device ได้แบบ 1:1 หาก Device มีจำนวนแค่ 1 เมื่อเราใช้คำสั่ง Publish ให้ดูในหัวข้อ "Detector generation method" ให้เราเลือก "Create a single detector" จะเป็นการสร้างแบบมี detector ตัวเดียว โดยเมื่อเราเข้าไปดูรายละเอียด Detector model จะเห็นหัวข้อล่างสุดเป็น Detector
หากเราเลือก "Create a detector for each unique key value" เราสามารถสร้าง Detector ต่อแต่ละ Device ได้ โดยสังเกตได้จากภาพด้านล่างจะเป็นว่าหัวข้อเดียวกัน แต่ว่าด้านล่างมีเติม s
Detector evaluation method
วิธีการประเมินการแสดงออกของ Detector มีอยู่ 2 ชนิด คือ "SERIAL" กับ "BATCH" ตามภาพที่เห็นด้านล่างนี้
โดยหากใครสนใจรายละเอียดเพิ่มเติมสามารถอ่านได่ที่เอกสารด้านล่างนี้
Debug
ในหัวข้อสุดท้ายนี้เราจะมาแนะนำวิธีการ Debug ง่ายๆกันนะครับ โดยการกด "Run analysis" ที่แสดงอยู่บนหน้าจอ จะทำการตรวจสอบการตั้งค่า Action หรือรูปแบบเงื่อนไขให้อัตโนมัติครับ หากเราใช้ AWS CLI หรือ AWS CloudFormation ในการอัพเดท Detector model ก็สามารถ Debug ง่ายๆ แบบนี้ได้เช่นเดียวกันครับ
หรือหากต้องการเรียนรู้เพิ่มเติม ก็สามารถศึกษาได้ที่บทความด้านล่างนี้ครับ
การ Run Analysis เป็นเพียงแค่การ Debug เบื้องต้นเท่านั้น หากเราต้องการตรวจสอบอย่างละเอียดจำเป็นต้องทดสอบ Logic อาจจะต้องทดสอบการทำงานของข้อมูลเองผ่าน GUI Console หรือการเขียน test code ตรวจสอบการทำงานจริงผ่าน IoT Rule ซึ่งอาจจะได้เขียนเกี่ยวกับหัวข้อนี้ต่อไปในอนาคตครับ
สรุป
สรุปแล้ว AWS IoT Events ก็คือ 1 ใน IoT Service ที่ทำหน้าที่ตรวจจับความเปลี่ยนแปลงต่างๆของ Device แล้วสร้าง trigger เพื่อทำ event ส่งไปยังบริการต่างๆก็ของ AWS ได้นั่นเองครับ
บทความต้นฉบับ
AWS IoT 再入門ブログリレー – AWS IoT Events 編 | DevelopersIO (Japanese)